LLM 代码组成结构 — 以 DeepSeek 为例

大语言模型(Large Language Model,LLM)的代码由多个层次组成:从底层的 GPU 算子内核、分布式通信库、存储基础设施,到模型定义、训练框架、推理加速和对外 API 服务。本文以 DeepSeek-V3(671B MoE,37B 激活/Token)及其开源生态为例,用 UML 图系统梳理 LLM 代码的全栈架构。

DeepSeek-V3 关键参数:总参数 671B(MoE 架构,256 个专家,每次激活 8 个即 37B),预训练 14.8T tokens,FP8 混合精度,完整训练仅需 2.788M H800 GPU 小时。

第一部分:行为图(系统做什么)

从用例到主流程再到交互细节,逐步细化

1.1 用例图 — LLM 全生命周期

LLM 涉及四类主要参与者:算法工程师(算法工程师)负责训练微调,系统工程师(系统工程师)负责集群与部署,应用开发者(应用开发者)通过 API 集成,最终用户使用 Chat 产品。

PlantUML diagram
图 1:LLM 全生命周期用例图

专有名词:

1.2 活动图 — 训练主流程

一次完整的 LLM 训练经过三个阶段:预训练(从零学习语言能力)、SFT 微调(学习指令遵循)、RL 对齐(学习偏好对齐)。

PlantUML diagram
图 2:LLM 训练主流程活动图

专有名词:

1.3 活动图 — 推理主流程

推理分为两个阶段:Prefill(预填充)一次性处理全部输入 prompt,生成 KV Cache;Decode(逐 token 生成)自回归逐 token 输出。

PlantUML diagram
图 3:LLM 推理主流程活动图

专有名词:

1.4 时序图 — MoE 路由与 Token 调度

MoE(Mixture of Experts)是 DeepSeek-V3 的核心架构:每层有 256 个专家,每个 token 只激活 8 个。路由通过 DeepEP 实现跨 GPU 的 token 分发(Dispatch)与汇总(Combine)。

PlantUML diagram
图 4:MoE 路由时序图 — Token Dispatch & Combine

专有名词:

1.5 时序图 — 自回归推理生成

从用户发送 prompt 到最终返回生成结果,经历 Prefill、多轮 Decode(支持 MTP 投机解码加速)等阶段。

PlantUML diagram
图 5:自回归推理生成时序图

专有名词:

1.6 状态机图 — 模型生命周期

LLM 模型从研发到部署经历多个状态转换。

PlantUML diagram
图 6:模型生命周期状态机图

专有名词:

第二部分:结构图(系统由什么组成)

从宏观架构递进到内部细节、物理部署

2.1 组件图 — LLM 代码整体架构总览

LLM 代码按层次分为模型层、计算内核层、通信层、存储层、框架层、服务层六大模块。

PlantUML diagram
图 7:LLM 代码整体组件图

专有名词:

2.2 包图 — DeepSeek 开源仓库依赖关系

DeepSeek 将 LLM 代码拆分为多个独立的 GitHub 仓库,每个聚焦一个子系统。

PlantUML diagram
图 8:DeepSeek 开源仓库包图

以下是用 Python 调用这些核心库的 Demo 代码:

# === 1. FlashMLA: Dense Decode (推理中最频繁的操作) ===
from flash_mla import get_mla_metadata, flash_mla_with_kvcache

# 获取 tile scheduler 元数据(推理循环前调用一次)
tile_metadata, num_splits = get_mla_metadata(
    cache_seqlens, s_q=1, h_q=128, h_kv=1, is_fp8=False, topk=0
)
# Decode 循环中每层调用
for layer_idx in range(num_layers):
    attn_out, lse = flash_mla_with_kvcache(
        queries[layer_idx], kv_cache[layer_idx],
        block_table, cache_seqlens, head_dim_v,
        tile_metadata, num_splits, is_causal=True
    )

# === 2. DeepGEMM: MoE Expert 的 GEMM 计算 ===
import deep_gemm
# 连续布局的 Grouped GEMM(MoE 训练/Prefill)
y = deep_gemm.m_grouped_fp8_gemm_nt_contiguous(x, weights, m_indices)
# FP8 标准 GEMM for Attention QKV projection
out = deep_gemm.fp8_gemm_nt(q, k_weight)  # D = C + A @ B.T

# === 3. DeepEP: MoE 的 All-to-All Dispatch & Combine ===
from deep_ep import ElasticBuffer
buffer = ElasticBuffer(group, num_max_tokens_per_rank=8192, hidden=7168, num_topk=8)
# Dispatch: 将 token 分发到对应 expert 所在的 GPU
recv_x, recv_idx, recv_weights, handle, event = buffer.dispatch(
    hidden_states, topk_idx=topk_idx, topk_weights=topk_weights,
    num_experts=256, num_sms=6, async_with_compute_stream=True
)
event.current_stream_wait()  # 等待通信完成
# 本地计算 Expert GEMM 后 ... Combine: 汇总还原
combined, event = buffer.combine(expert_outputs, handle=handle,
                                  num_sms=6, async_with_compute_stream=True)

# === 4. 3FS: 高吞吐 Checkpoint 读写 ===
# 通过 FUSE 挂载,以标准文件接口读写(无需特殊 API)
# 支持 180 存储节点、6.6 TiB/s 聚合读取吞吐

# === 5. DeepSpec: 投机解码加速 ===
# bash scripts/eval/eval.sh
# 使用 draft model 快速预测多个候选 token,target model 并行验证
# DSpark / DFlash / Eagle3 三种算法,可加速 1.5x-2x

2.3 组件图 — Transformer Block 内部结构

DeepSeek-V3 共 61 个 Transformer 层,每层由 MLA Attention + DeepSeekMoE FFN 组成,额外附带 MTP 模块用于多 token 预测。

PlantUML diagram
图 9:单个 Transformer Block 内部组件结构

专有名词:

2.4 部署图 — 分布式训练集群

DeepSeek-V3 使用 2048 块 H800 GPU 进行预训练,采用 EP + TP + DP 三维并行策略,底层靠 3FS 做共享存储,InfiniBand 做跨节点互联。

PlantUML diagram
图 10:分布式训练集群部署图

专有名词:

2.5 部署图 — 推理服务架构

推理阶段通过 SGLang/vLLM 等推理引擎管理 KV Cache 分页、Continuous Batching 和多 GPU 张量并行。

PlantUML diagram
图 11:推理服务部署架构图

专有名词:

附录:DeepSeek 开源仓库速查表

仓库 功能 语言 Stars 许可
DeepSeek-V3 模型权重、推理 Demo、配置 Python 104k+ MIT
FlashMLA MLA 注意力内核(Prefill / Decode / Sparse) C++/CUDA 12.8k MIT
DeepGEMM GEMM 内核(FP8/BF16/FP4)、Mega MoE、DSA Indexer CUDA/C++ 7.6k MIT
DeepEP Expert Parallel 通信(All-to-All Dispatch / Combine) CUDA/C++ 9.9k MIT
3FS 分布式文件系统(数据 / Checkpoint / KVCache) C++/Rust 10.1k MIT
DeepSpec 投机解码训练与评估(DSpark/DFlash/Eagle3) Python 6.8k MIT
TileKernels TileLang 内核库 Python 1.7k MIT

附录:持久化与数据库体系

DeepSeek 使用了三层数据库体系支撑从训练到推理的全生命周期数据持久化。训练过程中产生的所有持久化 entity 最终落盘在 3FS 分布式文件系统上。

数据库分层

数据库 层级 存储内容 特点
FoundationDB 文件系统元数据 inode(文件/目录/软链接属性)、目录项(DENT)、文件 chunk layout(chain table 分配、shuffle seed、chunk size、stripe size) 事务型 KV 存储,Serializable Snapshot Isolation;多个 stateless meta service 并行读写,冲突自动重试
RocksDB 每 SSD 本地 chunk 引擎 chunk ID → physical block 映射、chunk 版本号(committed/pending)、chain version 标记 嵌入式 KV,配合内存 hashmap cache;chunk 更新走 Copy-on-Write,commit 时原子写入
ZooKeeper / etcd 集群协调 chain table 配置、membership 状态、主备选举 也可复用 FoundationDB 替代

训练后持久化的 Entity

Entity 存储介质 大小/说明
Model Checkpoint 3FS chunk (SSD × 3 副本) 模型权重 + AdamW optimizer states(momentum / variance)+ 训练步数 + 随机种子。每个 checkpoint 数百 GB 级
最终模型权重 3FS → 发布至 HuggingFace DeepSeek-V3 约 685B(671B MoE + 14B MTP),FP8 格式 .safetensors
训练日志 / TensorBoard 3FS 文件 loss 曲线、每步指标、benchmark 评测结果
训练数据集 3FS 文件 14.8T tokens 预处理后的 tokenized 二进制数据。多个训练节点通过 3FS FUSE 随机读取样本
文件元数据 FoundationDB inode(64-bit 单调递增 ID)+ 目录项。meta service 通过 round-robin + shuffle 给新文件分配 chain
PlantUML diagram
图 12:训练持久化链路

附录:开源权重与数据库的关系

开源权重 ≠ 公开数据库。两者是完全不同的概念。
开源内容(已公开) 未公开内容
模型层 模型权重 .safetensors 文件(685B)、推理 Demo 代码、配置文件 训练框架完整代码(仅公开了推理/转换部分)
内核层 FlashMLA、DeepGEMM、DeepEP、3FS、DeepSpec、TileKernels —
数据层 — 14.8T tokens 训练数据集、数据清洗 pipeline、分词器训练数据
训练产物 最终权重 中间 checkpoint、optimizer states、训练日志、loss 曲线
数据库 — FoundationDB 中的 inode/目录项、RocksDB 中的 chunk 元数据、ZooKeeper 中的集群配置

打个比方:开源权重相当于公开了"一幅已经画好的画",但不等于公开了"颜料配方、画布供应商、工作室钥匙、每一版草稿"(训练数据、数据库、infra 配置、中间 checkpoint)。